// pages/booking/booking.js
const app = getApp();
import Dialog from '@vant/weapp/dialog/dialog';
const db = wx.cloud.database();
let userid = app.getUser();
let bookingobj=''

function generateUUID() {  
    var d = new Date().getTime();  
    var uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {  
        var r = (d + Math.random() * 16) % 16 | 0;  
        d = Math.floor(d / 16);  
        return (c === 'x' ? r : (r & 0x3) | 0x8).toString(16);  
    });  
    return uuid;  
}  
  
function generateOrderNumber() {  
    // 生成完整的UUID  
    var uuid = generateUUID();  
      
    // 截取部分长度作为订单号
    var orderNumber = uuid.substring(0, 5);  
      
    return orderNumber;  
}
//最终的订单号
function getOrderId(){
    return ""+Date.now()+generateOrderNumber()
}  
Page({
    /**
     * 页面的初始数据
     */
    data: {
        name: '',
        phoneNumber: '',
        date: '',
        show: false,
        user: '',
        money:1500
    },
    pay(payData) {
        //官方标准的支付方法
        wx.requestPayment({
            timeStamp: payData.timeStamp,
            nonceStr: payData.nonceStr,
            package: payData.package, //统一下单接口返回的 prepay_id 格式如：prepay_id=***
            signType: 'MD5',
            paySign: payData.paySign, //签名
            success(res) {
                console.log("支付成功", res)
                //预约单添加到云数据库
                db.collection('bookings').add({
                    data: bookingobj,
                    success: res => {
                        //跳转预约记录
                        wx.navigateTo({
                            url: '../../clintEnd/yuyue/yuyue'
                        })
                    },
                    fail: err => {
                        console.error('添加失败', err);
                        // 在这里可以处理添加失败的情况，比如显示错误信息给用户  
                        wx.showToast({
                            title: '添加失败',
                            icon: 'none',
                            duration: 2000
                        });
                    }
                })
            },
            fail(res) {
                console.log("支付失败", res)
            },
            complete(res) {
                console.log("支付完成", res)
            }
        })
    },

    onDisplay() {
        this.setData({
            show: true
        });
    },
    onClose() {
        this.setData({
            show: false
        });
    },
    formatDate(date) {
        date = new Date(date);
        return `${date.getMonth() + 1}/${date.getDate()}`;
    },
    onConfirm(event) {
        this.setData({
            show: false,
            date: this.formatDate(event.detail),
        });
    },

    onInput(event) {
        this.setData({
            currentDate: event.detail,
        });
    },
    submitBooking() {
        //封装预约记录对象
        bookingobj = {
            name: this.data.name,
            phoneNumber: this.data.phoneNumber,
            date: this.data.date,
            user: this.data.user
        }
        // 微信支付
        wx.cloud.callFunction({
            name: "pay",
            data: {
                orderid:getOrderId(),
                money: this.data.money
            },
            success:res=> {
                console.log("提交成功", res.result)
                this.pay(res.result)
            },
            fail(res) {
                console.log("提交失败", res)
            }
        })



    },

    /**
     * 生命周期函数--监听页面加载
     */
    onLoad(options) {
        this.setData({
            user: userid
        })
    },

    /**
     * 生命周期函数--监听页面初次渲染完成
     */
    onReady() {

    },

    /**
     * 生命周期函数--监听页面显示
     */
    onShow() {
        Dialog.confirm({
                title: '预约须知',
                message: '预约成功后默认同意《预约须知》内容:\n(1)您可以在此预约的内容包括非遗传承人面对面讲解(收费5元/人);亲手做一做,带走自己的第一个草木染作品(收费15元/个)\n(2)目前动手实践仅提供板蓝根叶制成的蓝色染料,如需要提供其它染料请提前电话沟通\n(3)染料使用植物进行发酵/蒸煮提取,实践过程中可能会有染料发酵的气味,对身体并无不良影响。对相关植物过敏者请谨慎预约！\n(4)由于扎染的特殊性质,捆扎的松紧程度,氧化的时间长短等很多因素都会导致产生色差,系统预览效果仅供大致参考,如预约线下实践,结果请以实际为准!',
            })
            .then(() => {
                // on confirm
            })
            .catch(() => {
                // on cancel
            });
    },

})